package com.softeem.spider;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
import java.util.Scanner;

//URL   协议://域名:端口/路径?参数  （http://pvp.qq.com:8080/hero/list?limit=5&page=1）
//java中凡是可以由开发者自定义的名称（类名，方法名，变(常)量名）都称之标识符
//HTML: HyperText Markup Language
//Http: HyperText Transfer Protocol
public class HttpUtils {

    // https://pvp.qq.com/web201605/herolist.shtml
    public static InputStream readAsStream(String url) throws IOException {
        //将字符串类型URL地址包装为Java对象（java.net.URL）
        URL urlObj = new URL(url);
        //打开到目标URL网络连接(将URLConnection对象强制转换为HttpURLConnection)
        HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
        //获取响应状态码（404-NotFound    500-Internel Server Error    200-OK）
        int code = conn.getResponseCode();
        if(code == 200){
            //响应成功，获取响应数据(输入流)
            return conn.getInputStream();
        }
        return null;
    }

    public static String readAsHtml(String url) throws IOException {
        InputStream is = readAsStream(url);
        if(is == null){
            return null;
        }
        //将字节流包装为字符流
        InputStreamReader isr = new InputStreamReader(is,"GBK");
        //文本文件（字符流：文本文档，Java源文件,配置文件，xml文件），二进制文件（字节流：图片，音频，视频）
        //通过缓冲流包装字符流（提高读取效率）
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        //声明缓冲字符串，对每一次读取的一行文本做拼接
        StringBuffer sb = new StringBuffer();
        //循环读取流中数据
        while((line = br.readLine()) != null){
            sb.append(line).append("\n");
        }
        return sb.toString();
    }

}
